package date0701;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcTest02 {

	public static void main(String[] args) throws ClassNotFoundException , SQLException , IOException {
		
		String driverClassName = "oracle.jdbc.driver.OracleDriver"  ;
		String url = "jdbc:oracle:thin:@localhost:1521:ecut" ;
		String user = "ecuter" ;
		String password = "ecuter" ;
		
		/*
		String driverClassName = "com.mysql.cj.jdbc.Driver"  ;
		String url = "jdbc:mysql://localhost:3306/ecut?serverTimezone=Asia/Shanghai&useSSL=false" ;
		String user = "ecuter" ;
		String password = "ecuter" ;
		*/
		
		// 1、加载数据库驱动
		Class.forName( driverClassName ); // ClassNotFoundException
		
		// 2、获得数据库连接
		Connection connection = DriverManager.getConnection( url , user , password ); // SQLException
		
		// 3、创建 Statement 对象
		Statement statement = connection.createStatement(); // SQLException
		
		StringBuffer buffer = new StringBuffer();
		
		Reader reader = new InputStreamReader( System.in ) ; // 将 标准输入流 包装成 字符输入流
		BufferedReader br = new BufferedReader( reader ); // 将 字符输入流 保证成 带有缓冲功能的 字符输入流
		
		System.out.print( "SQL> " );
		int count = 1 ;
		while( true ) {
			String s = br.readLine(); // 每次读取一行
			buffer.append( s ); // 将本行读取到的数据追加到字符缓冲区中
			if( s.endsWith( ";" ) ) {
				break ;
			}
			System.out.print( ++count + " "); // 像 SQL*Plus 一样输出行数统计
		}
		
		br.close(); // IOException
		reader.close(); // IOException
		
		buffer.deleteCharAt( buffer.lastIndexOf( ";" ) ); // 剔除末尾的分号
		
		String SQL = buffer.toString().trim().toLowerCase() ; // 剔除收尾空白并全部转小写
		
		if( SQL.startsWith( "create table" ) || SQL.startsWith( "alter table" )  || SQL.startsWith( "drop table" ) || SQL.startsWith( "truncate table" ) ) {
			// 4、"执行" DDL 语句 ( create table / alter table / drop table / truncate table )
			int result = statement.executeUpdate( SQL ); // SQLException
			
			// 5、如果 "执行" 的是DDL 语句，则 executeUpdate 一定返回 零
			System.out.println( "result ==> " + result );
		} else {
			System.out.println( "不是DDL语句: " + SQL );
		}
			
		// 6、释放资源( 所有已经开启的资源必须都关闭 )
		statement.close(); // SQLException
		connection.close(); // SQLException

	}

}
